/**
 * ESUI (Enterprise UI)
 * Copyright 2015 Baidu Inc. All rights reserved.
 *
 * @ignore
 * @file 密码检验规则
 * @author jiangyuan（jiangyuan01@baidu.com）
 */
define(
    function (require) {
        var ValidityState = require('esui/validator/ValidityState');

        /**
         * 密码检验规则
         *
         * 需要注意的是，当值为空时，此规则默认为通过。
         * 对于非空检验请使用{@link validator.RequiredRule}
         *
         * @extends validator.Rule
         * @class validator.PasswordRule
         * @constructor
         */
        var exports = {};

        /**
         * 规则类型，始终为`"passwordRule"`
         *
         * @type {string}
         * @override
         */
        exports.type = 'passwordRule';

        /**
         * 错误提示信息
         *
         * @type {string}
         * @override
         */
        exports.errorMessage = '密码至少包含一个大写字母，一个小写字母和一个阿拉伯数字';

        /**
         * 验证控件的验证状态
         *
         * @param {string} value 校验值
         * @param {Control} control 待校验控件
         * @return {validator.ValidityState}
         * @override
         */
        exports.check = function (value, control) {
            var result = (/^[a-z0-9]+$/i).test(value)
                && /[A-Z]/.test(value)
                && /[a-z]/.test(value)
                && /[0-9]/.test(value);

            return new ValidityState(
                !value || result,
                this.getErrorMessage(control)
            );
        };

        var Rule = require('esui/validator/Rule');
        var PasswordRule = require('eoo').create(Rule, exports);
        require('esui/main').registerRule(PasswordRule, 200);

        return PasswordRule;
    }
);

